package com.lanswon.qzsmk.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.lanswon.qzsmk.model.CardControl;
import com.lanswon.qzsmk.model.StockSum;
import com.lanswon.qzsmk.vo.QueryIncomingAndOutGoing;
import com.lanswon.qzsmk.vo.StockSumVo;

@Repository
public interface StockSumMapper {

	/**
	 * 更新信息
	 * @param record
	 * @return
	 */
    int updateStockSumByIcoming(StockSum stocksum);
    
    /**
	 * 查询库存汇总ID值
	 * @param record
	 * @return
	 */
    String queryStockSumNoByCardPCode(StockSum stocksum);

    /**
     * 更新库存汇总信息,配送
     * @param stocksum
     * @return
     */
    int updateStockSumByDistribute(StockSum stocksum);
    /**
	 * 更新
	 * @param companyNo
	 * @return
	 */
	void update(StockSum ss);
	
	/**
	 * 插入库存汇总表新的数据
	 * @param stockSum
	 */
	void insertNewStockInfo(StockSum stockSum);
	
	/**
	 * 查询最大的SumID号
	 * @return
	 */
	String queryMaxStockSumID();
	/**
	 * 根据库存汇总ID查询库存明细
	 * @param companyNo
	 * @return
	 */
	StockSum queryStockSumByStorNo(String stockSumId);
	/**
	 * 查询能出库信息
	 * @param companyNo
	 * @return
	 */
	List<StockSumVo> queryCardDelivryBySumid(@Param("cardpCode")String cardpCode,
    		@Param("branchNo")String branchNo,@Param("taskNo")String taskNo);
	/**
	 * 根据任务编号查询能出库信息
	 * @param companyNo
	 * @return
	 */
	StockSumVo queryCardDelivryByTakNo(String taskNo);
	/**
     * 根据入库流水号查询
     * @param stockSumId 入库流水号
     * @return
     */
    List<StockSumVo> queryStockSumVoByStockSumId(String stockSumId);
    
    /**
     * 查询库存汇总信息
     * @param stockSum
     * @return
     */
    StockSum queryStockSumByCardPCode(StockSum stockSum);
    
    /**
     * 根据入库流水号查询
     * @param stockSumId 入库流水号
     * @return
     *//*
    List<StockSumVo> queryStockSumVoByStorageNo(String storageNo);*/
    
    /**
     * 更新库存汇总信息,卡片上交
     * @param stocksum
     * @return
     */
    int updateStockSumByCardHand(StockSum stocksum);
    
    /**
     * 网点配送至中心库，更新库存
     * @param ssObj
     */
	void updateStockSumByDistributeToCenter(StockSum ssObj);
	
	/**
	 * 入库撤销，更新库存
	 * @param ssObj
	 */
	void updateStockSumByCancelIncoming(StockSum ssObj);
	
	/**
	 * 出库撤销
	 * @param ssObj
	 */
	void updateStockSumByOutCancel(StockSum ssObj);
	
	/**
	 * 对将要更新的库存汇总数据，加行锁
	 * @param stockSumIDToUpdate
	 * @return
	 */
	StockSum queryStockSumBySumId(@Param("stockSumId")String stockSumIDToUpdate);
	 /**
     * 根据出库流水号查询
     * @param storageNo 出库流水号
     * @return
     */
    List<StockSum> queryStockSumVoByStorageNo(String storageNo);
    /**
     * 根据入库流水号查询
     * @param storageNo 入库流水号
     * @return
     */
    List<StockSum> queryStockSumByStorageNo(String storageNo);
    
    /**
     * 通过ID号查询库存信息
     * @param stockSumIdList
     * @return
     */
	List<StockSum> queryStockSumBySumIDList(@Param("stockSumIdList")List<String> stockSumIdList);
	
	/**
	 * 
	 * @param branchNo
	 * @param cardPCode
	 * @return
	 */
	List<StockSum> queryInventory(@Param("branchNo")String branchNo, @Param("cardPCode")String cardPCode);

	/**
	 * 统计出入库记录（按月）
	 * @param branchName
	 * @param cardPCode
	 * @param acountDate
	 * @return
	 */
	List<QueryIncomingAndOutGoing> queryIncomeAndOutgoingInfo(@Param("branchNo")String branchNo, 
			@Param("cardPCode")String cardPCode, @Param("dateFrom")String dateFrom,@Param("dateTo")String dateTo);
	
	/**
	 * 查询总共条目
	 * @return
	 */
	int queryStockSumTotalCounts();
	
	/**
	 * 查询库存对应的卡号
	 * @param cardStatus
	 * @param taskType
	 * @param cardPCode
	 * @param branchNo
	 * @param stockPosition
	 * @param physicTypeCode
	 * @return
	 */
	List<String> queryCardNoByStockInfo(@Param("cardStatus")String cardStatus, @Param("taskType")String taskType, @Param("cardPCode")String cardPCode, 
			@Param("branchNo")String branchNo,@Param("stockPosition")String stockPosition, @Param("physicTypeCode")String physicTypeCode);
	
}
